package org.jiuling.kuaidi100.dto;


import org.jiuling.basics.validation.StringVerify;
import org.jiuling.kuaidi100.exception.Kuaidi100RuntimeException;

/**
 * 实时物流查询数据传输对象
 * @author 紫灵
 * @date 2024年02月28日 22时44分20秒
 */
public class RealTimeExpressCheckDto {

    /** 查询的快递公司的编码， 一律用小写字母 下载编码表格 */
    private String com;
    /** 查询的快递单号， 单号的最小长度6个字符，最大长度32个字符 */
    private String num;
    /** 收、寄件人的电话号码（手机和固定电话均可，只能填写一个，顺丰速运、顺丰快运必填，其他快递公司选填。如座机号码有分机号，分机号无需传入。） */
    private String phone;
    /** 出发地城市 */
    private String from;
    /** 目的地城市，到达目的地后会加大监控频率 */
    private String to;
    /** 添加此字段表示开通行政区域解析功能。空：关闭（默认），1：开通行政区域解析功能以及物流轨迹增加物流状态名称 4: 开通行政解析功能以及物流轨迹增加物流高级状态名称、状态值并且返回出发、目的及当前城市信息 */
    private String resultv2;
    /** 返回格式：0：json格式（默认），1：xml，2：html，3：text */
    private String show;
    /** 返回结果排序:desc降序（默认）,asc 升序 */
    private String order;

    public String getCom() {
        return com;
    }

    public String getNum() {
        return num;
    }

    public String getPhone() {
        return phone;
    }

    public String getFrom() {
        return from;
    }

    public String getTo() {
        return to;
    }

    public String getResultv2() {
        return resultv2;
    }

    public String getShow() {
        return show;
    }

    public String getOrder() {
        return order;
    }

    /**
     * 建造者
     * @return 建造者
     */
    public static Builder builder(){
        return new Builder();
    }

    /**
     * 建造者
     */
    public static class Builder{

        /** 实时物流查询数据传输对象 */
        private final RealTimeExpressCheckDto realTimeExpressCheckDto;

        public Builder() {
            this.realTimeExpressCheckDto = new RealTimeExpressCheckDto();
        }

        public Builder setCom(String com) {
            realTimeExpressCheckDto.com = com;
            return this;
        }

        public Builder setNum(String num) {
            realTimeExpressCheckDto.num = num;
            return this;
        }

        public Builder setPhone(String phone) {
            realTimeExpressCheckDto.phone = phone;
            return this;
        }

        public Builder setFrom(String from) {
            realTimeExpressCheckDto.from = from;
            return this;
        }

        public Builder setTo(String to) {
            realTimeExpressCheckDto.to = to;
            return this;
        }

        public Builder setResultv2(String resultv2) {
            realTimeExpressCheckDto.resultv2 = resultv2;
            return this;
        }

        public Builder setShow(String show) {
            realTimeExpressCheckDto.show = show;
            return this;
        }

        public Builder setOrder(String order) {
            realTimeExpressCheckDto.order = order;
            return this;
        }

        /**
         * 构建
         * @return 实时物流查询数据传输对象
         */
        public RealTimeExpressCheckDto build(){
            if(StringVerify.isBlank(realTimeExpressCheckDto.com)){
                throw new Kuaidi100RuntimeException("快递公司的编码不能为空！");
            }
            String num = realTimeExpressCheckDto.num;
            if(StringVerify.isBlank(num)){
                throw new Kuaidi100RuntimeException("快递单号不能为空！");
            }
            int length = num.length();
            if(length < 6 || length > 32){
                throw new Kuaidi100RuntimeException("快递单号长度不正确！");
            }
            return realTimeExpressCheckDto;
        }

    }

}
